package com.ssy.lingxi.order.model.constant;

import com.ssy.lingxi.common.language.LanguageHolder;
import com.ssy.lingxi.order.model.vo.basic.response.DropdownItem;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 订单外部状态枚举
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-16
 */
public enum OrderOuterStatusEnum {

    /**
     * 待提交 - 1
     */
    TO_SUBMIT(1, "待提交"),

    /**
     * 待确认 - 2
     */
    TO_CONFIRM(2, "待确认"),

    /**
     * 不接受订单 - 3
     */
    NOT_ACCEPT(3, "不接受订单"),

    /**
     * 待确认电子合同 - 4
     */
    TO_CONFIRM_CONTRACT(4, "待确认电子合同"),

    /**
     * 不同意签订电子合同 - 5
     */
    NOT_ACCEPT_CONTRACT(5, "不同意签订电子合同"),

    /**
     * 待支付 - 6
     */
    TO_PAY(6, "待支付"),

    /**
     * 待确认支付结果 - 7
     */
    TO_CONFIRM_PAYMENT(7, "待确认支付结果"),

    /**
     * 确认未到账 - 8
     */
    PAYMENT_NOT_ACCOMPLISH(8, "确认未到账"),

    /**
     * 待新增销售发货单 - 9
     */
    TO_DELIVER(9, "待新增销售发货单"),

    /**
     * 待新增物流单 - 10
     */
    TO_LOGISTICS(10, "待新增物流单"),

    /**
     * 待确认发货 - 11
     */
    TO_CONFIRM_DELIVERY(11, "待确认发货"),

    /**
     * 待新增采购入库单 - 12
     */
    TO_DEPOSIT(12, "待新增采购入库单"),

    /**
     * 待确认收货 - 13
     */
    TO_RECEIPT(13, "待确认收货"),

    /**
     * 待确认回单 - 14
     */
    TO_CONFIRM_RECEIPT(14, "待确认回单"),

    /**
     * 待归档 - 15
     */
    TO_ARCHIVE(15, "待归档"),

    /**
     * 待新增采购收货单 - 16
     */
    TO_RECEIVE(16, "待新增采购收货单"),

    /**
     * 已完成 - 100
     */
    ACCOMPLISHED(100, "已完成"),

    /**
     * 已取消 - 101
     */
    CANCELLED(101, "已取消"),

    /**
     * 已中止 - 102
     */
    TERMINATED(102, "已中止");

    OrderOuterStatusEnum(Integer code, String name) {
        this.code = code;
    }

    /**
     * 外部状态枚举值
     */
    private Integer code;

    public Integer getCode() {
        return code;
    }

    public String getName() {
        return LanguageHolder.getName(this.getClass(), this.code);
    }

    /**
     * 根据外部状态枚举值获得外部状态名称
     * @param code 外部状态枚举值
     * @return 外部状态名称
     */
    public static String getNameByCode(Integer code) {
        return LanguageHolder.getName(OrderOuterStatusEnum.class, code);
    }

    /**
     * 获得状态列表
     * @return 前端下拉框内容
     */
    public static List<DropdownItem> toDropdownList() {
        String key = OrderOuterStatusEnum.class.getSimpleName().concat(".");
        return Arrays.stream(OrderOuterStatusEnum.values()).map(e -> new DropdownItem(e.getCode(), LanguageHolder.getName(key.concat(String.valueOf(e.getCode()))))).collect(Collectors.toList());
    }
}
